import config from '@/config/index.js'
import useUserInfoStore from '@/stores/user.js'
import api from '@/api/index.js';
import defaultImg from '@/static/images/default-scenic.svg';
import dayjs from 'dayjs';

export default {
	setToken(token) {
		return uni.setStorageSync('token', token);
	},
	removeToken() {
		return uni.removeStorageSync('token');
	},
	getToken() {
		let token = uni.getStorageSync('token')
		return token
	},
	setCache(k, v) {
		return uni.setStorageSync(k, v)
	},
	getCache(k) {
		return uni.getStorageSync(k)
	},
	delCache(k) {
		return uni.removeStorageSync(k)
	},
	getApi(path) {
		return config.api_base_url + path
	},
	genUrl(url, query) {
		if (JSON.stringify(query) == "{}") {
			return url;
		}
		if (url.indexOf('?') == -1) {
			url += '?'
		} else {
			url += '&'
		}

		// for (var key in query) {
		// 	if (query[key] !== null) {
		// 		url += (key + '=' + encodeURIComponent(query[key]) + '&');
		// 	}
		// }
		// return url.substring(0, url.lastIndexOf('&'));

		let urls = Object.keys(query).map(key => {
			const value = query[key];
			if (value !== undefined && value !== null && value !== '') {
				if (Array.isArray(value)) {
					return value.map(val =>
						`${encodeURIComponent(key)}[]=${encodeURIComponent(val)}`
					).join(
						'&');
				} else {
					return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
				}
			} else {
				return '';
			}
		}).filter(e => e !== '').join('&');
		return url += urls
	},


	uuid() {
		var s = [];
		var hexDigits =
			"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		for (var i = 0; i < 16; i++) {
			s[i] = hexDigits.substr(Math.floor(Math.random() * 0x30), 1);
		}
		var uuid = s.join("");
		return uuid;
	},

	// 数据深拷贝
	deepClone(obj) {
		function deepClone(obj) {
			// 数据类型为引用数据类型
			if (typeof obj === 'object') {
				// 初始化返回结果
				let result = Array.isArray(obj) ? [] : {};
				for (let key in obj) {
					// 避免相互引用出现死循环导致爆栈
					if (obj === obj[key]) {
						continue
					}
					if (obj.hasOwnProperty(key)) {
						// 递归调用
						result[key] = deepClone(obj[key])
					}
				}
				return result;
			} else {
				// 基本数据类型，直接返回
				return obj
			}
		}
		return deepClone(obj)
	},

	// 计算某个值的百分比
	GetPercent(total, num, unit = '%') {
		// total总数基数(相当于100%)
		// num当前数值
		// unit 单位(%)
		num = parseFloat(num);
		total = parseFloat(total);
		if (isNaN(num) || isNaN(total)) {
			return "-";
		}
		return total <= 0 ? "0%" : (Math.round(num / total * 10000) / 100.00) +
			unit;
	},

	// 计算对象中某个key之和
	countTotal(arr, keyName) {
		let $total = 0;
		$total = arr.reduce(function (total, currentValue, currentIndex, arr) {
			return currentValue[keyName] ? (total + +currentValue[
				keyName]) : total;
		}, 0);
		return $total;
	},

	// 判断数组对象内的某个字段是否有重复
	// checkRepeat(arr,'id')
	checkRepeat(arr, val) {
		var array = [];
		arr.forEach((item) => {
			if (item) {
				array.push(item[val]);
			}
		});
		if (new Set(array).size != arr.length) {
			return true;
		}
		return false;
	},

	// 在线图片转base64
	getImgBase64(url) {
		return new Promise((resolve, reject) => {
			uni.showLoading({
				title: '获取中...',
				mask: true
			});
			uni.request({
				url: url,
				method: 'GET',
				responseType: 'arraybuffer',
				success: function (res) {
					let base64 = uni.arrayBufferToBase64(res
						.data);
					resolve('data:image/jpg;base64,' +
						base64)
				},
				fail(err) {
					reject('图片转换失败')
				},
				complete() {
					uni.hideLoading();
				}
			});
		});
	},

	// 去除所有空格
	trimAll(str) {
		return str.replace(/\s/g, '');
	},

	// 直接发送图片给好友
	goShare(imgUrl) {
		wx.downloadFile({
			url: imgUrl,
			success: (res) => {
				wx.showShareImageMenu({
					path: res.tempFilePath
				})
			},
			fail: (res) => {
				if (res.errMsg.indexOf('deny') != -1 || res.errMsg
					.indexOf('denied') != -1) {
					wx.showToast({
						title: '保存相册失败，请设置权限！',
						icon: 'none',
						duration: 2000,
					})
				} else {
					wx.showToast({
						title: '保存相册失败，请重试！',
						icon: 'none',
						duration: 2000,
					});
				}
			}
		})
	},

	// 打电话
	ringup(phone) {
		if (!phone) {
			phone = '133-5036-0404'
		}
		uni.makePhoneCall({
			phoneNumber: phone
		});
	},

	// 验证电话号码
	isPhoneNumber(phoneNumber) {
		// 移除字符串中的非数字字符
		var numberOnly = phoneNumber.replace(/\D/g, "");
		// 通过正则表达式进行验证
		var regex = /^1[3456789]\d{9}$/;
		return regex.test(numberOnly);
	},
	// 加密电话号码 188 **** **89
	pwPhone(phone) {
		phone = phone + ''
		if (phone) {
			return phone.slice(0, 3) + ' **** **' + phone.slice(9)
		}
	},

	getPageUrl: () => {
		const store = useUserInfoStore()
		// 获取当前页面的完整 URL
		const currentUrl = window.location.href;
		// 获取查询参数
		const queryParams = new URLSearchParams(window.location.search);
		// 当前页面路径
		store.page_url = currentUrl.split('#')[1]
		console.log('当前页面路径', store.page_url);
		if (store.page_url.includes('pages/user')) return;
		setTimeout(() => {
			uni.redirectTo({
				url: '/pages/user'
			});
		}, 1000)
	},

	// // H5微信登录
	wechatLogin: async () => {
		await api.userApi.getRedirectUrl({
			scope: 'snsapi_userinfo', //snsapi_base获取基本信息，snsapi_userinfo获取详细信息
			to_url: config.h5_url + '/#/pages/user',
			returnAll: 1
		}).then(res => {
			if (res.code == 200) {
				window.location.href = res.data.url
			} else {
				uni.showToast({
					title: res.message,
					icon: 'none'
				})
			}
		})
	},

	// 扫码
	scanQrcode() {
		uni.scanCode({
			success: function (res) {
				// console.log('扫码结果：', res);
				const pageurl = res.result.split('#')[1];
				if (pageurl.includes('t=')) {
					uni.redirectTo({
						url: pageurl
					});
				} else {
					uni.$u.toast('系统无法识别此二维码')
				}
			},
			fail: function (err) {
				// console.log('扫码失败', err);
				uni.$u.toast('扫码失败')
			}
		});
	},

	// 下载文件
	downloadImg(imgUrl) {
		// 从URL中获取文件名
		const getFileName = (url) => {
			// 先尝试从URL中获取文件名
			const urlFileName = url.split('/').pop();
			// 检查是否包含文件扩展名
			const hasExtension = /\.(jpg|jpeg|png|gif|webp)$/i.test(urlFileName);
			if (hasExtension) {
				return urlFileName;
			}
			// 如果URL中没有有效的文件名，生成一个时间戳文件名
			const timestamp = dayjs().valueOf();
			return `image_${timestamp}.jpg`;
		};

		// 确保使用 HTTPS
		const secureUrl = imgUrl.replace(/^http:/, 'https:');
		const fileName = getFileName(secureUrl);

		// #ifdef H5
		// H5端下载逻辑
		const a = document.createElement('a');
		a.href = secureUrl;
		a.download = fileName;
		document.body.appendChild(a);
		a.click();
		document.body.removeChild(a);
		// #endif

		// #ifndef H5
		// APP端下载逻辑
		uni.downloadFile({
			url: secureUrl,
			success: (res) => {
				if (res.statusCode === 200) {
					// 重命名文件
					const newFilePath = `${uni.env.USER_DATA_PATH}/${fileName}`;
					// 复制并重命名临时文件
					uni.saveFile({
						tempFilePath: res.tempFilePath,
						filePath: newFilePath,
						success: (saveRes) => {
							// 保存图片到相册
							uni.saveImageToPhotosAlbum({
								filePath: saveRes.savedFilePath,
								success: () => {
									uni.showToast({
										title: '保存成功',
										icon: 'success'
									});
									// 清理临时文件
									uni.removeSavedFile({
										filePath: saveRes.savedFilePath
									});
								},
								fail: (err) => {
									console.error('保存失败：', err);
									uni.showToast({
										title: '保存失败',
										icon: 'none'
									});
								}
							});
						},
						fail: (err) => {
							console.error('文件保存失败：', err);
							// 如果重命名失败，使用原始临时文件保存
							uni.saveImageToPhotosAlbum({
								filePath: res.tempFilePath,
								success: () => {
									uni.showToast({
										title: '保存成功',
										icon: 'success'
									});
								},
								fail: (err) => {
									uni.showToast({
										title: '保存失败',
										icon: 'none'
									});
								}
							});
						}
					});
				}
			},
			fail: (err) => {
				console.error('下载失败：', err);
				uni.showToast({
					title: '下载失败',
					icon: 'none'
				});
			}
		});
		// #endif
	},

	// 打开地图导航的通用函数
	openMapNavigation: (latitude, longitude, name) => {
		// #ifdef H5
		// H5端使用第三方地图服务（高德地图和腾讯地图）
		const mapUrls = [
			// 高德地图 URI Scheme
			`https://uri.amap.com/marker?position=${longitude},${latitude}&name=${encodeURIComponent(name)}&coordinate=gaode&callnative=1&src=waing-ai`,
			// 腾讯地图 URI Scheme
			`https://apis.map.qq.com/uri/v1/marker?marker=coord:${latitude},${longitude};title:${encodeURIComponent(name)};&referer=waing-ai`
		];

		uni.showActionSheet({
			itemList: ['高德地图(推荐)', '腾讯地图'],
			success: (res) => {
				if (res.tapIndex < 2) {
					window.open(mapUrls[res.tapIndex], '_blank');
					uni.showToast({
						title: '正在打开地图...',
						icon: 'success'
					});
				}
			},
			fail: () => {
				//取消
			}
		});
		// #endif

		// #ifdef MP-WEIXIN || APP-PLUS
		// 小程序和App端使用原生地图
		uni.openLocation({
			latitude: latitude,
			longitude: longitude,
			name: name,
			// address: `四川省成都市天府广场 • 剩余车位${item.availableSpaces}个`,
			scale: 15,
			success: () => {
				console.log('成功打开地图导航');
				uni.showToast({
					title: '地图已打开',
					icon: 'success'
				});
			},
			fail: (err) => {
				console.error('打开地图失败:', err);
				uni.showModal({
					title: '导航失败',
					content: '无法打开地图，请检查网络连接',
					showCancel: false,
					confirmText: '确定'
				});
			}
		});
		// #endif
	},

	// 默认封面图片
	defaultImg: (img) => {
		const imgUrl = uni.imgUrl;
		if (img) {
			return imgUrl + img;
		}
		return defaultImg; // 默认图片
	},

	// 获取随机标签颜色类名
	getRandomTagColor: (index, type) => {
		const colors = ['tag-color-0', 'tag-color-1', 'tag-color-2', 'tag-color-3', 'tag-color-4', 'tag-color-5', 'tag-color-6', 'tag-color-7'];
		// 使用Math.random()让颜色真正随机
		if (type) {
			return colors[index % colors.length];
		} else {
			return colors[Math.floor(Math.random() * colors.length)];
		}
	},
}